home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 52 / Amiga Format AFCD52 (Issue 136, May 2000).iso / -serious- / programming / other / littelcomp / r5 / lc / extractwords.e next >
Text File  |  2000-02-28  |  2KB  |  83 lines

  1. -> MODULE for lc17.e
  2. -> AUTHOR : leif_salomonsson@swipnet.se
  3.  
  4. OPT MODULE
  5.  
  6. OPT LARGE
  7.  
  8. -> 991205 : added support for '//', skips rest of line
  9. -> 991220 : removing above, added support for ; comment..
  10.  
  11. EXPORT OBJECT extractwords
  12.    PRIVATE
  13.    nrofwords
  14.    wordptrs:PTR TO LONG
  15.    buffer:PTR TO CHAR
  16.    bufsize
  17.    maxnrofwords
  18. ENDOBJECT
  19.  
  20. PROC getWord(num) OF extractwords IS self.wordptrs[num]
  21.  
  22. PROC getNrOfWords() OF extractwords IS self.nrofwords
  23.  
  24. PROC getArray() OF extractwords IS self.wordptrs
  25.  
  26. PROC new(maxnrofwords, bufsize) OF extractwords
  27.    bufsize := bufsize + 10
  28.    maxnrofwords++
  29.    self.buffer := FastNew(bufsize)
  30.    self.bufsize := bufsize
  31.    self.maxnrofwords := maxnrofwords
  32.    self.wordptrs := FastNew(maxnrofwords * 4)
  33. ENDPROC
  34.  
  35. PROC extract(line:PTR TO CHAR) OF extractwords
  36.    DEF buf:REG PTR TO CHAR
  37.    DEF a:REG
  38.    DEF insen=FALSE
  39.    self.nrofwords := NIL
  40.    AstrCopy(self.buffer+1, line, (self.bufsize)-2)
  41.  
  42.    buf := self.buffer
  43.    buf++
  44.    WHILE (buf[] <> 10) AND (buf[] <> NIL)
  45.      buf++
  46.    ENDWHILE
  47.    buf[] :=NIL
  48.    buf[1]:= NIL
  49.  
  50.    buf := self.buffer
  51.    FOR a := 0 TO (self.maxnrofwords)-1
  52.       self.wordptrs[a] := NIL
  53.    ENDFOR
  54.    REPEAT          -> 34 = "
  55.       buf++
  56.       IF buf[] = 34
  57.          IF insen = FALSE THEN insen := TRUE ELSE insen := FALSE
  58.       ENDIF
  59.       IF insen = FALSE
  60.          IF     buf[] = " "
  61.             buf[] := NIL
  62.          ELSEIF buf[] = ","
  63.             buf[] := NIL
  64.          ELSEIF buf[] = "("
  65.             buf[] := NIL
  66.          ELSEIF buf[] = ")"
  67.             buf[] := NIL
  68.          ENDIF
  69.       ENDIF
  70.       IF buf[] = ";" THEN RETURN self.nrofwords
  71.       IF (buf[-1] = NIL) AND (buf[] <> NIL)
  72.          IF self.nrofwords = self.maxnrofwords THEN RETURN self.nrofwords
  73.          self.wordptrs[self.nrofwords] := buf
  74.          self.nrofwords := (self.nrofwords) + 1
  75.       ENDIF
  76.    UNTIL (buf[] = NIL) AND (buf[1] = NIL)
  77. ENDPROC self.nrofwords
  78.  
  79. PROC end() OF extractwords
  80.    FastDispose(self.buffer, self.bufsize)
  81.    FastDispose(self.wordptrs, (self.maxnrofwords) * 4)
  82. ENDPROC
  83.